]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
modalDialog: Fix auto-completion of prompts immediately upon display
authorStef Walter <stefw@gnome.org>
Wed, 13 Feb 2013 20:57:02 +0000 (21:57 +0100)
committerStef Walter <stefw@gnome.org>
Mon, 4 Mar 2013 08:17:41 +0000 (09:17 +0100)
Shell modal dialogs can take their action on a certain key's
key-release-event. For example on <enter> the affirmative action is
usually run.

Make sure that the key was also pressed on the dialog and we're not
seeing a spurious key-release-event from a key that was pressed before
the dialog was displayed.

https://bugzilla.gnome.org/show_bug.cgi?id=692937

js/ui/modalDialog.js

index 5c20b085c6a125a2ab31209cf310959ed3dcbc1d..304733efb1847a04e2274f73c887ff811fb97c21 100644 (file)
@@ -58,7 +58,9 @@ const ModalDialog = new Lang.Class({
 
         this._group.connect('destroy', Lang.bind(this, this._onGroupDestroy));
 
+        this._pressedKey = null;
         this._buttonKeys = {};
+        this._group.connect('key-press-event', Lang.bind(this, this._onKeyPressEvent));
         this._group.connect('key-release-event', Lang.bind(this, this._onKeyReleaseEvent));
 
         this._backgroundBin = new St.Bin();
@@ -179,10 +181,19 @@ const ModalDialog = new Lang.Class({
         return button;
     },
 
+    _onKeyPressEvent: function(object, event) {
+        this._pressedKey = event.get_key_symbol();
+    },
+
     _onKeyReleaseEvent: function(object, event) {
+        let pressedKey = this._pressedKey;
+        this._pressedKey = null;
+
         let symbol = event.get_key_symbol();
-        let buttonInfo = this._buttonKeys[symbol];
+        if (symbol != pressedKey)
+            return false;
 
+        let buttonInfo = this._buttonKeys[symbol];
         if (!buttonInfo)
             return false;